var express = require('express');
var router = express.Router();
const { UserModel, ChatModel } = require('./mongoose/models')
const md5 = require('blueimp-md5')

const filter = {
    password: 0,
    __v:0
}
// 注册路由
router.post('/register',(req,res)=>{
    // post 请求数据在req.body，get 请求请求数据在req.query
    const { username,password,userType } = req.body

    UserModel.findOne({ username },filter,(error,user)=>{

        if (user){
            res.send({status:0,msg:'用户已存在'})
        } else {
            new UserModel({ username, password:md5(password), userType }).save((err,data)=>{

                const { username, userType, _id } = data
                res.cookie('userId',userId=_id,{maxAge:1000*60*60*24})
                res.send({ status:1, data:{ username, userType, _id }})
            })
        }
    })

})

router.post('/login',(req,res)=>{
    const { username, password } = req.body
    UserModel.findOne({ username, password:md5(password)},filter,(error,user)=>{
        if(user){
            const { _id } = user
            res.cookie('userId', userId = _id, {maxAge:1000*60*60*24})
            res.send({ status:1,data:user })
        }else {
            res.send({ status:0, msg:'用户名或密码不正确'})
        }
    })

})

router.post('/update',(req,res)=>{

    const userId = req.cookies.userId
    if (!userId){
        return res.send({ status:0, msg:'请先登录' })
    }
    const user = req.body
    UserModel.findByIdAndUpdate({ _id:userId },user,(error,oldUser)=>{
        if (!oldUser){
            res.clearCookie('userId')
            res.send({ status:0, msg:'请先登录' })
        } else {
            const { _id, username, userType } = oldUser
            const data = Object.assign(user,{ _id, username, userType })
            res.send({ status:1, data })
        }
    })

})

router.get('/user',(req,res)=>{
    const userId = req.cookies.userId
    if (!userId){
        return res.send({ status:0, msg:'请先登录' })
    }
    UserModel.findOne({_id:userId},filter,(error,user)=>{
        if (!user) {
            return res.send({ status:0, msg:'请先登录' })
        }
        return res.send({ status:1, data:user })
    })
})

router.get('/userlist',(req,res)=>{
    const { userType } = req.query
    UserModel.find({ userType },filter,(error,users)=>{
        if (error) return res.send({ status:0,msg:'服务器错误' })
        if (users.length !== 0){
            res.send({ status:1,data:users })
        }
    })
})


//获取当前用户的聊天消息列表
router.get('/msgList',function (req,res) {
    const userId = req.cookies.userId
    UserModel.find(function (err,userDocs) {
        const users = {}
        userDocs.forEach(doc => {
            users[doc._id] = {username:doc.username,avatar:doc.header}
        })
        // const users = userDocs.reduce((users,user)=>{
        //     users[user._id] = {username:user.username,avatar:user.avatar}
        // },{})
        /*
            查询 userid 相关的所有聊天信息
            参数1：查询条件    我发的 和 发给我的 from and to
            参数2：过滤条件
            参数3：回调函数
        */

        ChatModel.find({"$or":[{from:userId},{to:userId}]},filter,function (err,chatMsgs) {
            return res.status(200).json({
                status:1,
                data:{users,chatMsgs}
            })
        })
    })
})

//修改指定消息为已读 ----->  修改数据用 post
router.post('/readMsg',function (req,res) {
    const from = req.body.from
    const to = req.cookies.userId
    /*
        更新数据库中的 chat 数据
        参数1：查询条件
        参数2：更新为指定的数据对象
        参数3：是否1次更新多条，默认只跟新一条
        参数4：更新完成的回调函数
    */
    ChatModel.update({from,to,read:false},{read: true},{multi:true},function (err,doc) {
        return res.status(200).json({
            status:1,
            data:doc.nModified  //更新的数量
        })
    })
})



module.exports = router;
